import pandas as pd
from langchain_community.document_loaders import DirectoryLoader   #目录加载器，加载指定目录下的所有文件，每个文件成为一个document对象
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter
import os
import pickle   #这个包是用来读取.pkl文件的


class MyDocument():
    def __init__(self, dir, name):
        #os.path.join 拼接成.chche\123.pkl
        if not os.path.exists(os.path.join(".cache", f"{name}_contents.pkl")):
            #如果.chche文件夹下没有对应contents.pkl文件，则进行加载目录
            # document里面有page_content内容，换行用\n\n表示，metadata，有文件的来源
            # 如果是多个文件就有多个document
            loader = DirectoryLoader(dir)
            documents = loader.load()
            text_spliter = CharacterTextSplitter(chunk_size=300, chunk_overlap=50)

            split_docs = text_spliter.split_documents(documents)
            contents = [i.page_content for i in split_docs]            #将所有的分割文档信息全部放到一个数组列表中
            #将其内容写入 windows中的换行符是\r\n 以二进制方式写
            with open(os.path.join(".cache", f"{name}_contents.pkl"), "wb") as f:
                pickle.dump(contents, f)
        else:
            #存在的化将文本信息加载成切片字符串
            with open(os.path.join(".cache", f"{name}_contents.pkl"), "rb") as f:
                contents = pickle.load(f)
        #这里的content其实是多个小的文档文档内容，整个成contents

        if os.path.exists(os.path.join(".cache", f"{name}_faiss_index_df.pkl")):
            with open(os.path.join(".cache", f"{name}_faiss_index_df.pkl"), "rb") as f:
                df = pickle.load(f)
            #读取出来qa问答对
        else:
            #没有的化就是一个空的
            df = pd.DataFrame({})
        self.qa_df = df   #qa_df就是qa对的抽取
        self.contents = contents  #content就是里面的内容
        #总之就是返回qa问答对和文档分割后的内容
    def get_contents(self):
        return self.contents



